1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  package com.google.common.collect;
18  
19  import static com.google.common.base.Preconditions.checkNotNull;
20  
21  import com.google.common.annotations.GwtCompatible;
22  import com.google.common.base.Supplier;
23  
24  import java.util.Comparator;
25  import java.util.Map;
26  import java.util.Set;
27  import java.util.SortedMap;
28  import java.util.SortedSet;
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  @GwtCompatible
49  class StandardRowSortedTable<R, C, V> extends StandardTable<R, C, V>
50      implements RowSortedTable<R, C, V> {
51    
52  
53  
54  
55  
56  
57    StandardRowSortedTable(SortedMap<R, Map<C, V>> backingMap,
58        Supplier<? extends Map<C, V>> factory) {
59      super(backingMap, factory);
60    }
61  
62    private SortedMap<R, Map<C, V>> sortedBackingMap() {
63      return (SortedMap<R, Map<C, V>>) backingMap;
64    }
65  
66    
67  
68  
69  
70  
71  
72    @Override public SortedSet<R> rowKeySet() {
73      return (SortedSet<R>) rowMap().keySet();
74    }
75  
76    
77  
78  
79  
80  
81  
82    @Override public SortedMap<R, Map<C, V>> rowMap() {
83      return (SortedMap<R, Map<C, V>>) super.rowMap();
84    }
85  
86    @Override
87    SortedMap<R, Map<C, V>> createRowMap() {
88      return new RowSortedMap();
89    }
90  
91    private class RowSortedMap extends RowMap implements SortedMap<R, Map<C, V>> {
92      @Override
93      public SortedSet<R> keySet() {
94        return (SortedSet<R>) super.keySet();
95      }
96  
97      @Override
98      SortedSet<R> createKeySet() {
99        return new Maps.SortedKeySet<R, Map<C, V>>(this);
100     }
101 
102     @Override
103     public Comparator<? super R> comparator() {
104       return sortedBackingMap().comparator();
105     }
106 
107     @Override
108     public R firstKey() {
109       return sortedBackingMap().firstKey();
110     }
111 
112     @Override
113     public R lastKey() {
114       return sortedBackingMap().lastKey();
115     }
116 
117     @Override
118     public SortedMap<R, Map<C, V>> headMap(R toKey) {
119       checkNotNull(toKey);
120       return new StandardRowSortedTable<R, C, V>(
121           sortedBackingMap().headMap(toKey), factory).rowMap();
122     }
123 
124     @Override
125     public SortedMap<R, Map<C, V>> subMap(R fromKey, R toKey) {
126       checkNotNull(fromKey);
127       checkNotNull(toKey);
128       return new StandardRowSortedTable<R, C, V>(
129           sortedBackingMap().subMap(fromKey, toKey), factory).rowMap();
130     }
131 
132     @Override
133     public SortedMap<R, Map<C, V>> tailMap(R fromKey) {
134       checkNotNull(fromKey);
135       return new StandardRowSortedTable<R, C, V>(
136           sortedBackingMap().tailMap(fromKey), factory).rowMap();
137     }
138   }
139 
140   private static final long serialVersionUID = 0;
141 }